#include <cstdio>
#include <chrono>
#include <thread>
#include <unistd.h>
#include "vl_semphore.h"

using namespace VL;

static Semphore sem(Semphore::generateKey(".vl_build/product/bin/vl_semphore", 1), 2, new unsigned short[2]{1, 0});


void mainTask() {
	sem.markNotCreate();
	while(!sem.initSemphore()) {
		// printf("main: initSemphore failed\n");
	}
	printf("main: initSemphore\n");
	
	sem.p(0);
	printf("main process - run ..\n");
	sem.v(1);
	sem.p(0);
	printf("main process - done ..\n");
	sem.v(1);
}

void forkTask() {
	sem.initSemphore();
	printf("sem: initSemphore\n");
	sem.p(1);
	printf("child process - run ..\n");
	sem.v(0);
	sem.p(1);
	printf("child process - done ..\n");
}

int main(int argc, const char ** argv) {
	if(fork() == 0) {
		// 进程
		forkTask();
	} else {
		mainTask();
	}


	return 0;
}
